## 内容概述
### 入门篇
时间、空间复杂度分析是数据结构与算法中非常重要的知识点。

需要掌握时间、空间复杂度的概念、大 O 表示法的由来，各种复杂度分析技巧、以及最好、最坏、平均、均摊复杂度分析方法。
### 基础篇
共有 26 节内容，涵盖了最基础，最常用的数据结构和算法。
### 高级篇
介绍了一些不常用但重要的数据结构和算法，以拓宽视野，增强算法思维。
### 实战篇
将前面学到的知识应用到实际项目中，通过实战加深理解。


学习数据结构和算法，目的是建立时间复杂度、空间复杂度意识，写出高质量代码、能够设计基础架构、提成编程技能，训练逻辑思维、积攒人生经验。

掌握数据结构与算法，看待问题的深度，解决问题的角度就会不一样。

## 什么是数据结构？什么是算法？
从广义上讲，数据结构就是一组数据的存储结构。算法就是操作数据的一组方法。

> 图书馆储藏书籍，为了方便查找，图书管理员一般会将书籍分门别类进行存储。按照一定的规律编号，就是书籍这种 数据 的存储结构。
> 在查找一本书时，可以一本一本地找，也可以先根据书籍类别的编号来定位书架，然后再依次查找。笼统地说，这些查找方法都是算法。

从狭义上讲，数据结构与算法是指某些著名的数据结构与算法，比如队列、栈、堆、二分查找、动态规划等。

数据结构和算法是相辅相成的。数据结构是为算法服务的，算法要作用在特定的数据结构之上。

比如，因为数组具有随机访问的特点，常用的二分查找法需要使用数组来存储数据。但如果选择链表这种数据结构，二分查找法就无法使用了。

数据结构是静态的，它只是组织数据的一种方式。如果不在它的基础上操作、构建算法、数据结构是没有用途的。

## 学习的重点
学习数据结构与算法，首先要掌握一个数据结构与算法中最重要的概念————复杂度分析。

数据结构与算法解决的是如何更省、更快地存储和处理数据的问题，因此，我们就需要一个考量效率和资源消耗的方法，这就是复杂度分析方法。


![](https://wkq-img.oss-cn-chengdu.aliyuncs.com/img/913e0ababe43a2d57267df5c5f0832a7.jpg)

以下是 20 个最常用、最基础的数据结构与算法，这里有 10 个数据结构：数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树；
10 个算法：递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
## 一些技巧
1. 每周花几个小时，集中把这周学习的内容，全部自己写出来，用代码实现一遍。
2. 记录笔记
